 //Developed by Rajarshi Roy
import java.awt.Robot; //java library that lets us take screenshots
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Dimension;
import processing.serial.*; //library for serial communication


Serial port; //creates object "port" of serial class
Robot robby; //creates object "robby" of robot class

void setup()
{
  println(Serial.list());
port = new Serial(this, Serial.list()[1],9600); //set baud rate
size(100, 100); //window size (doesn't matter)
try //standard Robot class error check
{
robby = new Robot();
}
catch (AWTException e)
{
println("Robot class not supported by your system!");
exit();
}
}

void draw()
{
int pixel; //ARGB variable with 32 int bytes where
//sets of 8 bytes are: Alpha, Red, Green, Blue
int r=0;
int g=0;
int b=0;

//get screenshot into object "screenshot" of class BufferedImage
Rectangle rect = new Rectangle(new Dimension(1920,1080));
//rect.setPosition(0,0);
BufferedImage screenshot = robby.createScreenCapture(rect);
//1368*928 is the screen resolution


int i=0;
int j=0;
//1368*928
//I skip every alternate pixel making my program 4 times faster
for(i =0;i<1920; i=i+2){
for(j=0; j<1080;j=j+2){
pixel = screenshot.getRGB(i,j); //the ARGB integer has the colors of pixel (i,j)
r = r+(int)(255&(pixel>>16)); //add up reds
g = g+(int)(255&(pixel>>8)); //add up greens
b = b+(int)(255&(pixel)); //add up blues
}
}
r=r/(960*540); //average red (remember that I skipped ever alternate pixel)
g=g/(960*540); //average green
b=b/(960*540); //average blue


port.write(0xff); //write marker (0xff) for synchronization
port.write(r+","+g+","+b+"\n"); //write red value

delay(10); //delay for safety
background(r,g,b); //make window background average color
}
